package com.complaintcase.system.service.impl;

import java.util.List;

import com.complaintcase.common.core.domain.entity.SysUser;
import com.complaintcase.common.core.domain.model.LoginUser;
import com.complaintcase.common.exception.ServiceException;
import com.complaintcase.common.utils.SecurityUtils;
import com.complaintcase.common.utils.StringUtils;
import com.complaintcase.common.utils.bean.BeanValidators;
import com.complaintcase.system.domain.CaseBestInfo;
import com.complaintcase.system.domain.CaseInfoExport;
import com.complaintcase.system.mapper.CaseBestInfoMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.complaintcase.system.mapper.CaseInfoMapper;
import com.complaintcase.system.domain.CaseInfo;
import com.complaintcase.system.service.ICaseInfoService;

/**
 * 投诉案件信息Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-09-20
 */
@Service
public class CaseInfoServiceImpl implements ICaseInfoService 
{
    private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);

    @Autowired
    private CaseInfoMapper caseInfoMapper;
    @Autowired
    private CaseBestInfoMapper caseBestInfoMapper;

    /**
     * 查询投诉案件信息
     * 
     * @param id 投诉案件信息主键
     * @return 投诉案件信息
     */
    @Override
    public CaseInfo selectCaseInfoById(Long id)
    {
        return caseInfoMapper.selectCaseInfoById(id);
    }

    /**
     * 查询投诉案件信息列表
     * 
     * @param caseInfo 投诉案件信息
     * @return 投诉案件信息
     */
    @Override
    public List<CaseInfo> selectCaseInfoList(CaseInfo caseInfo)
    {
        List<CaseInfo> caseInfos = caseInfoMapper.selectCaseInfoList(caseInfo);
        //获取当前登录用户

        return caseInfos;
    }
    @Override
        public List<CaseInfoExport> selectCaseInfoExportList(CaseInfo caseInfo)
        {
            List<CaseInfoExport> caseInfos = caseInfoMapper.selectCaseInfoExportList(caseInfo);
            //获取当前登录用户

            return caseInfos;
        }

    /**
     * 新增投诉案件信息
     * 
     * @param caseInfo 投诉案件信息
     * @return 结果
     */
    @Override
    public int insertCaseInfo(CaseInfo caseInfo)
    {
        Long userId = SecurityUtils.getUserId();
        caseInfo.setUserId(userId);
        int i = caseInfoMapper.insertCaseInfo(caseInfo);
        //是否为优秀录音,true时同步到优秀录音表
        if(caseInfo.getIsGoodRecording()){
            //接听日期（坐席信息区的“被诉录音日期”）  录音时间（坐席信息区的被诉录音时间”） 座席工号改为（座席工号） ）对应的坐席信息区的“工号”） 姓名改为对应座席 （坐席信息区的“对应座席”  服务态度 沟通技巧（对应处理信息区“其他类”）  问题解决  描述及评价对应（处理信息区的“录音及优点描述”）
            CaseBestInfo caseBestInfo = new CaseBestInfo();
            caseBestInfo.setCaseNo(caseInfo.getCaseNo());
            caseBestInfo.setCaseContent(caseInfo.getCaseContent()) ;
            caseBestInfo.setMonth(caseInfo.getMonth().toString());
            caseBestInfo.setAnswerDate(caseInfo.getRecordingDate());
            caseBestInfo.setRecordingTime(caseInfo.getRecordingTime());
            caseBestInfo.setEmployeeId(caseInfo.getEmployeeId());
            caseBestInfo.setUserName(caseInfo.getEmployeeName());
            caseBestInfo.setServiceAttitude(caseInfo.getServiceAttitude());
            caseBestInfo.setServiceSkills(caseInfo.getAttitudeCategory());
            caseBestInfo.setProblemSolving(caseInfo.getSolvingCategory());
            caseBestInfo.setDescription(caseInfo.getAdvantageDescription());
            caseBestInfo.setUserId(caseInfo.getUserId());
            caseBestInfo.setDataSource("投诉处理");
            caseBestInfoMapper.insertCaseBestInfo(caseBestInfo);
        }
        return  i;
    }

    @Override
    public String importCaseInfo(List<CaseInfo> caseInfoList, Long userId) {
        if (StringUtils.isNull(caseInfoList) || caseInfoList.size() == 0)
        {
            throw new ServiceException("导入用户数据不能为空！");
        }
        int successNum = 0;
        int failureNum = 0;
        StringBuilder successMsg = new StringBuilder();
        StringBuilder failureMsg = new StringBuilder();
        for (CaseInfo caseInfo : caseInfoList)
        {
            try
            {
                // 验证是否存在这个用户
                caseInfoMapper.insertCaseInfo(caseInfo);
                successNum++;
                successMsg.append("<br/>" + successNum + "、工单编号 " + caseInfo.getCaseNo() + " 导入成功");

            }
            catch (Exception e)
            {
                failureNum++;
                String msg = "<br/>" + failureNum + "、工单编号 " + caseInfo.getCaseNo() + " 导入失败：";
                failureMsg.append(msg + e.getMessage());
                log.error(msg, e);
            }
        }
        if (failureNum > 0)
        {
            failureMsg.insert(0, "很抱歉，导入失败！共 " + failureNum + " 条数据格式不正确，错误如下：");
            throw new ServiceException(failureMsg.toString());
        }
        else
        {
            successMsg.insert(0, "恭喜您，数据已全部导入成功！共 " + successNum + " 条，数据如下：");
        }
        return successMsg.toString();
    }

    /**
     * 修改投诉案件信息
     * 
     * @param caseInfo 投诉案件信息
     * @return 结果
     */
    @Override
    public int updateCaseInfo(CaseInfo caseInfo)
    {
        Long userId = SecurityUtils.getUserId();
        caseInfo.setUserId(userId);
        return caseInfoMapper.updateCaseInfo(caseInfo);
    }

    /**
     * 批量删除投诉案件信息
     * 
     * @param ids 需要删除的投诉案件信息主键
     * @return 结果
     */
    @Override
    public int deleteCaseInfoByIds(Long[] ids)
    {
        return caseInfoMapper.deleteCaseInfoByIds(ids);
    }

    /**
     * 删除投诉案件信息信息
     * 
     * @param id 投诉案件信息主键
     * @return 结果
     */
    @Override
    public int deleteCaseInfoById(Long id)
    {
        return caseInfoMapper.deleteCaseInfoById(id);
    }
}
